package com.kaifamiao.arrays;

import java.util.Arrays;

// 数组拷贝
// System.arraycopy( src, srcBegin , dest , destBegin , length )
// 第一个参数 src 表示源数组 (即从哪个数组中复制)
// 第二个参数 srcBegin 表示从源数组哪个位置开始复制
// 第三个参数 dest 表示目标数组 (即将元素复制到哪个数组中)
// 第四个参数 destBegin 表示复制后的元素从目标数组中哪个位置开始存放
// 第五个参数 length 表示被复制的元素个数
public class Copy {
    public static void main(String[] args) {
        int[] src = { 1, 2, 3, 4, 5 };
        System.out.println( "源数组: " + Arrays.toString( src ) );

        int[] dest = new int[10];
        System.out.println( "目标数组: " + Arrays.toString( dest ) );

        // 从 src 数组下标为 2 的元素开始复制 2 个 元素
        // 到 dest 数组中并且从下标为 5 的位置开始存放
        System.arraycopy( src , 2 , dest , 5 , 2 );
        System.out.println( "目标数组: " + Arrays.toString( dest ) );

        System.arraycopy( src , 0 , dest , 0 , 5 );
        System.out.println( "目标数组: " + Arrays.toString( dest ) );

        System.out.println( "- ".repeat( 20 ) );

        char[] source = {'春','眠','不','觉','晓'};
        char[] target = new char[source.length];
        System.out.println( Arrays.toString( target ) );
        System.arraycopy( source, 0 , target, 0,5);
        System.out.println( Arrays.toString( target ) );

        System.out.println( source == target ); // false
        System.out.println( Arrays.equals( source, target ) ); // true

        System.out.println( "- ".repeat( 20 ) );

        int[] array = { 2, 4, 6, 8, 10 };
        System.out.println( Arrays.toString( array ) );
        // 删除 array 中的值为 6 的元素 (实际上是用后面的元素逐个覆盖前面的元素)
        System.arraycopy( array, 3, array, 2, 2 );
        // 将数组末尾的元素修改为 默认值 (基本数据类型数组中元素的默认值)
        array[ array.length - 1 ] = 0 ;
        System.out.println( Arrays.toString( array ) );

    }
}
